\documentclass[a4paper,12pt]{scrartcl} 

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{graphicx}
\usepackage{url}
\usepackage{fancyhdr}
\usepackage{textcomp}
\usepackage{hyperref}
\usepackage{enumerate}

\usepackage{fancybox}
\usepackage{float}

\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small{Aleksander Zotov {\tiny(2646129)}, 
					Benedikt Markt {\tiny(2637358)}, 
	\				Aliaksei Babkovich {\tiny(2698083)}}}
\fancyhead[C]{\small{}}
\fancyhead[R]{\small{Gruppe 20}}
\fancyfoot[C]{\thepage}

\title{\includegraphics[scale=0.7]{images/login.png} \\ Entwurf} 
\author{Aleksander Zotov {\small(2646129)}\\
        Benedikt Markt {\small(2637358)}\\
        Aliaksei Babkovich {\small(2698083)}}
\date{12. Dezember 2012\\
\small{Version: 1.0}\\
\small{Letzte Änderung: 12. Dezember 2012}}

\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\section{Einleitung}
		Dieser Entwurf gilt als Richtlinie bei der Entwicklung des SatPro. Es dokumentiert die grundsätzlichen Überlegungen der Entwickler beim
		Entwurf des Gesamtsystems und seiner Komponenten. Zudem enthält es Beschreibungen der wichtigsten Programmkomponenten und Informationen
		darüber, wie diese miteinander interagieren. Diese liegen als UML-Diagramme vor.
	\subsection{Leserkreis}
		Dieses Dokument ist für den folgenden Leserkreis bestimmt:
		\begin{itemize}
			\item Das Projektteam
			\item Die Betreuer des Softwarepraktikums
			\item Der Auftraggeber
			\item Die zukünftigen Wartungsingenieure
		\end{itemize}
	\subsection{Überblick über dieses Dokument}
		Der erste große Teil dieses Dokuments (Kapitel~\ref{sec:architektur}) besteht aus Beschreibungen der verschiedenen, beim Entwurf des Programms zur Anwendung
		gekommenen Prinzipien, um dem Leser alle weiteren Schritte des Entwurfs verständlich zu machen. Darauf aufbauend folgen in Kapitel~\ref{sec:programmkomponenten}
		detailliertere Beschreibungen von Programmkomponenten und deren Interaktion. Dies wird mit UML-Diagrammen veranschaulicht. Die hier
		detailliert beschriebenen Komponenten dienen exemplarisch für evtl. nicht näher beschriebene Programmkomponenten, die konsistent im Sinne
		dieses Entwurfs umgesetzt werden. Die detaillierte Dokumentation der einzelnen Klassen und Methoden wird mit Hife von JavaDoc erstellt.
		
	\subsection{Das Programm}
		SatPro dient der Verwaltung und Auswertung von Berechnungen mittels eines externen Algorithmus. Es handelt sich um eine Web-Anwendung, 
		die auf einem Server des Kunden installiert wird. Die Implementierung erfolgt in Java und wird mit Hilfe von JSF realisiert.
		Die Daten werden in einer Datenbank gespeichert.
	
	
	
	\subsection{Vorkenntnisse}
		Zum Verständnis dieses Dokumnents werden umfassende Kenntnisse über den Entwurf von Softwaresystemen und der UML Sprache vorrausgesetzt. Des weiteren
		wird der Inhalt der Spezifikation als bekannt vorrausgesetzt.
	
	
\section{Architektur}
\label{sec:architektur}
	
	\subsection{Systementwurf}
		\subsubsection{Entwurfsprinzipien}
			Die Architektur gliedert sich in fünf große Komponenten, bestehend aus den Komponenten User Interface, Application, Database Provider,
			Download Manager und der externen, vom Kunden gelieferten Komponente CAT.exe. Die Komponenten sollen über möglichst wenige Schnittstellen
			miteinander kommunizieren können. Die Erweiterbarkeit soll grundsätzlich vorhanden sein, derzeit existieren aber keine konkreten Pläne
			für Erweiterungen.
	\subsection{Externe Komponten}
			Die vom Kunden gelieferte Komponente CAT.exe dient der eigentlichen Durchführung der Simulationen. Sie gibt nach Abschluss der Simulation entweder ein
			Ergebnis oder einen Fehlerbericht als Textdatei aus. Des weiteren wird der aktuelle Fortschritt ausgegeben.
			

\section{Programmkomponenten}
\label{sec:programmkomponenten}

	\subsection{User Interface}
		Das User Interface dient als Schnittstelle zwischen dem Benutzer und der Anwendungslogik. Es besteht zum Großteil aus einer mit Hilfe von
		Java Server Faces implementierten Weboberfläche. Die Logik hinter den einzelnen GUI-Bestandteilen wird mit Java-Klassen implementiert.
		Die Buttons sind direkt in xhtml geschrieben und rufen die jeweiligen Methoden aus entsprechenden Java-Klassen auf.
		\subsubsection{Schnittstellen}
			Die direkte Schnittstelle anderer Komponenten zur GUI ist durch \verb!ButtonBean!-Klasse gegeben. Aus \verb!ButtonBean! werden die
			Methoden anderer Klassen den jeweiligen Buttons zugeordnet und gesteuert. Vom Benutzer eingegebene Daten werden von der 
			\verb!Validator!-Klasse auf korrekte Formatierung und semantische Logik überprüft.
			
			\begin{figure}
				\centering	
					\includegraphics[scale=0.4]{images/class_diagram_UI.png}
				\caption{Komponente: User Interface}
			\label{comp_ui}	
			\end{figure}
			
			\paragraph{MessageController}
				Die Klasse \verb!MessageController! ist für die Anzeige von Info-, Warn- und Fehlermeldungen verantwortlich.
				
			\begin{itemize}
				\item \verb!showInfoMessage(message: String)!\\
					Zeigt eine Infomeldung an, mit dem als Parameter übergebenen Text, zum Beispiel eine Benachrichtigung über
					eine abgeschlossene Berechnung.
				\item \verb!showWarningMessage(message: String)!\\
					Zeigt eine Warnmeldung an, mit dem als Parameter übergebenen Text, zum Beispiel eine Warnung bei ungünstig gewähltem
					Berechnungszeitraum.
				\item \verb!showErrorMessage(message: String)!\\
					Zeigt eine Fehlermeldung an, mit dem als Parameter übergebenen Text, zum Beispiel wenn bei der Berechnung ein
					Fehler aufgetreten ist
				\item \verb!showErrorLog()!\\
					Zeigt ein Fenster mit bei der Simulation aufgetretenen Fehlern.
				\end{itemize}
				
			\paragraph{ButtonBean}
				Ist für die zuordnung der Methoden auf jeweilige Buttons verantwortlich.
			
			\paragraph{Validator}
				Validiert die vom Benutzer eingegebenen Daten auf korrekte Formatierung.
				\begin{itemize}
					\item \verb!isValidSimname(name: String)!\\
						Überprüft ob der Name der Simulation korrekt Formatiert ist:
						\begin{itemize}
							\item Minimal 4 Zeichen lang;
							\item Maximal 20 Zeichen lang;
						\end{itemize}
					\item \verb!isValidSimDescription(description: String)!\\
						Überprüft ob die Beschreibung der Simulation korrekt Formatiert ist:
						\begin{itemize}
							\item Maximal 300 Zeichen lang;
						\end{itemize}
					\item \verb!isValidDate(date: String)!\\
						Überprüft die Datumeingaben auf die Formatierung. Folgende Datumformaten werden 							akzeptiert:
							\begin{itemize}
								\item \verb!tt.mm.jjjj!
								\item \verb!tt/mm/jjjj!
								\item \verb!jjjj/mm/tt!
								\item \verb!jjjj-mm-tt!
							\end{itemize}
					\item \verb!isValidStartEnd(start: Date, end: Date)!\\
						Überprüft den Berechnungszeitraum auf Korrektheit. Start-Zeitpunkt muss immer vor 
						dem End-Zeitpunkt liegen.
					\item \verb!isValidDistance(distance: String)!\\
						Überprüft die Entfernung auf Korrektheit.
					\item \verb!isValidTLE(tle: String)!\\
						Überprüft die eingegebene TLE Daten auf korrekte Formatierung.
					\item \verb!isValidUsername(username: String)!\\
						Überprüft ob der Benutzername den verlangten Standarts entspricht:
						\begin{itemize}
							\item Minimal 4 Zeichen lang;
							\item Maximal 12 Zeichen lang;
							\item Keine Zahlen am Anfang;
							\item Keine Sonderzeichen außer Unterstrich und Punkt;
						\end{itemize}												
					\item \verb!isValidPassword(password: String)!\\
						Überprüft ob das Passwort den Standarts entspricht:
						\begin{itemize}
							\item Mindestens 8 Zeichen lang;
							\item Maximal 18 Zeichen lang;
							\item Mindestens ein Groß- und. Kleinbuchstabe;
							\item Mindestens eine Zahl bzw. Sonderzeichen;
						\end{itemize}
					\item \verb!isValidIP(ipAdress: String)!\\
						Überpüft die IP Adresse auf korrekte Formatierung;
				\end{itemize}
				
				
	\subsection{Application}
		Application Komponente dient als Rumpf der Anwendung. Sie ist für die Ausführung der Simulationen, Benutzerverwaltung und die
		Anwendungseintellungen verantwortlich. 
		\subsubsection{Schnittstellen}
			Für die Berechnungen benötigte TLE-Daten werden mithilfe von \verb!SourceDB!-Klasse der Download Provider Komponente heruntergeladen.
			
			Die Schnittstelle mit Datenbank für die Speicherung bzw. Aufrufen der Simulationsrgebnissen, Benutzerdaten sowie
			Anwendungseinstellungen wird durch die Klasse \verb!DatabaseManager! der Database Provider Komponenten hergestellt.
			
			\begin{figure}
				\centering	
					\includegraphics[scale=0.3]{images/class_diagram_APP.png}
				\caption{Komponente: Application}
			\label{comp_app}	
			\end{figure}
			
			\paragraph{UserManager}
				Ist für die Benutzerverwaltung verantwortlich.
				\begin{itemize}
					\item \verb!resetPassword(username: String)! \\
						Setzt das Passwort des Benutzers zurück auf ein zufällig generiertes Passwort;
					\item \verb!deleteUser(username: String)! \\
						Löscht den Benutzer aus dem Datenbank;
					\item \verb!createUser(username: String)! \\
						Legt einen neuen Benutzer an;
					\item \verb!isExistingUser(username: String)! \\
						Überprüft ob der Benutzer im Datenbank vorhanden ist;
					\item \verb!isCorrectLogin(username: String, password: String)! \\
						Überprüft ob Benutzername und das Passwort übereinstimmen;
				\end{itemize}	
			\paragraph{User}
				Stellt den Benutzer dar.
				\begin{itemize}
					\item \verb!isAdmin()! \\
						Gibt zurück on der Benutzer Administratorrechte hat;
				\end{itemize}									
			\paragraph{UserPreferences}
				Repräsentiert die Eintellungen des Benutzers.
			\paragraph{ApplicationPreferences}
				Repräsentert die allgemeinen Anwendugseintellungen.
				\begin{itemize}
					\item \verb!savePreferences()!\\
						Speichert die Eintellungen auf dem Server;
					\item \verb!loadPreferences()!\\
						Lädt die Eintellungen aus der Eintellungsdatei;
				\end{itemize}
			\paragraph{SimulationManager}
				Beinhaltet die Verwaltungsfunktionen für die Simulation.
				\begin{itemize}
					\item \verb!startNewSimulation(simulation: Simulation)!\\
						Startet eine neue Simulation;
					\item \verb!cancelSimulation(identifier: String)!\\
						Bricht eine laufende Simulation ab;
				\end{itemize}								
			\paragraph{Simulation}
				Repräsentiert eine Simulation.
				\begin{itemize}
					\item \verb!isRunning()!\\
						Gibt zurück ob die Simulation läuft;
				\end{itemize}
		
	\subsection{Database Provider} 	
		Die Database Provider Komponente dient zur Steuerung und Verwaltung der SQL-Datenbank des Kunden.
		
		\subsubsection{Schnittstellen}
		
			\begin{figure}
					\centering	
						\includegraphics[scale=0.6]{images/class_diagram_DATABASE.png}
					\caption{Komponente: Database Provider}
				\label{comp_database}	
			\end{figure}
		
			\paragraph{DatabaseManager}
				Stellt Methoden für Speichern und Laden von Daten aus der Datenbank bereit.
				\begin{itemize}
					\item \verb!storeSimulation(simulation: Simulation)!\\
						Speichert eine Simulation in der Datenbank;
					\item \verb!deleteSimulation(identifier: String)!\\
						Löscht eine Simulation aus der Datenbank;
					\item \verb!loadSimulations()!\\
						Lädt alle in der Datenbank vorhandenen Simulationen;
					\item \verb!storeUser(user: User)!\\
						Speichert einen Benutzer in der Datenbank;
					\item \verb!deleteUser(user: User)!\\
						Löscht den Benutzer aus der Datenbank;
					\item \verb!isAvailable()!\\
						Prüft ob Datenbank erreichbar ist;
				\end{itemize}
			
		\subsubsection{Protokolle}
			Um die Komponente Database Provider verwenden zu können, muss zuerst die IP Adresse der zu verwendenden Datenbank eingetragen werden. 
			
	\subsection{Download Manager}
		Die Download Manager Komponente ist verantwortlich für das Herunterladen der TLE-Daten von den Datenquellseiten.
		
		\subsubsection{Schnittstellen}
		
			\begin{figure}
					\centering	
						\includegraphics[scale=0.6]{images/class_diagram_DOWNLOAD.png}
					\caption{Komponente: Download Manager}
				\label{comp_download}	
			\end{figure}
		
			\paragraph{SourceDB}
				Repräsentiert eine Datenquellseite und stellt die Methoden zum Download von TLE Daten dar.
			\paragraph{AGILogin}
				Stellt die Methode zum Download von TLE Daten aus dem AGI Katalog bereit.
				\begin{itemize}
					\item \verb!download()! \\
						Lädt die TLE Daten aus dem AGI Katalog herunter und speichert diese auf dem
						lokalen Dateisystem;
					\item \verb!isAvailable()! \\
						Gibt zurück ob AGI Katalog erreichbar ist;
				\end{itemize}
			\paragraph{SpaceTrackLogin}
				Stellt die Methode zum Download von TLE Daten aus dem SpaceTrack Katalog bereit.
				\begin{itemize}
					\item \verb!donwload()!\\
						Lädt die TLE Daten aus dem SpaceTrack Katalog herunter und speichert diese auf dem
						lokalen Dateisystem;
					\item \verb!isAvailable()! \\
						Gibt zurück ob SpaceTrack Katalog erreichbar ist; 
				\end{itemize}			
		
\section{Externe Schnittstellen}
\label{sec:extschnittstellen}
	\subsection{Dauerhafte Datenspeicherung}
		\subsubsection{Programmeinstellungen}
			Allgemeine Programmeinstellungen werden in dieser Datei gespeichert. Die Datei wird mithilfe 
			der Java Preferences API erzeugt. Die Einstellungen werden beim Starten des Programms geladen.
		\subsubsection{Benutzerprofile und Benutzereinstellungen}
			Alle angelegte Benutzer und die mit dem jeweiligen Benutzer assoziierte Einstellungen werden
			in der Datenbank des Kunden gespeichert. Ein Eintrag ist folgendermaßen formatiert: \\ \\
			\begin{tabular}{|l|l|l|}	
				\hline 
				\textbf{Spaltenname} & \textbf{Definition} & \textbf{Beschreibung} \\
				\hline
				username & character varying (12) NOT NULL & Der Benutzename \\
				\hline
				password & character varying (18) NOT NULL & Das Passwort \\
				\hline
				language & character (2) NOT NULL & Sprache der Benutzeroberfläche \\
				\hline
				reference\_system & integer NOT NULL & Das Referenzsystem \\
				\hline
			\end{tabular}
			\\ \\
			\textit{PrimaryKey} besteht aus \textit{username}.
		
		\subsection{Berechnungen}
			Alle Berechnungen werden in der Datenbank des Kunden gespeichert. Ein Eintrag ist
			folgendermaßen formatiert: \\ \\
			\begin{tabular}{|l|p{5,5cm}|l|}	
				\hline 
				\textbf{Spaltenname} & \textbf{Definition} & \textbf{Beschreibung} \\
				\hline
				name & character varying (20) NOT NULL & Der Name der Berechnung \\
				\hline
				description & character varying (300) & Die Beschreibung der Berechnung \\
				\hline
				collisiondistance & real NOT NULL & Kollisionsabstand \\
				\hline
				reference\_system & integer NOT NULL & Das Referenzsystem \\
				\hline
				starttime & timestamp without time zone NOT NULL & Anfang des Berechnungszeitraums \\
				\hline
				endtime & timestamp without time zone NOT NULL & Ende des Berechnungszeitraums \\
				\hline
				username & character varying (12) NOT NULL & Benutzer der Berechnung gestartet hat \\
				\hline
				collision\_count & integer NOT NULL & Anzahl der Kollisionen \\
				\hline 
				identifier & character varying (16) NOT NULL & Identifikationsstring der Berechnung \\
				\hline
				timestamp & timestamp without time zone NOT NULL & Startzeitpunkt der Berechnung \\
				\hline			
			\end{tabular}	
			\\ \\
			\textit{PrimaryKey} besteht aus \textit{identifier}.
		\subsection{Berechnugsergebnisse}
			Die Ergebnisse werden auf dem Server in einem Ordner als einzelne Textdateien gespeichert. Der
			Dateiname besteht aus dem \verb!identifier! der zugehöriger Simulation und der Endung
			\verb!.res!.
		\subsection{CAT.exe}
			Die Simulationen werden mithilfe vom \textit{CAT.exe} durchgeführt. Als Eingabe wird eine 
			input-Datei
			erzeugt und im gleichen Order wie die \textit{CAT.exe} Datei gespeichert. Außerdem wird für 
			die	Berechnung eine \textit{catalog.cato} Datei, die die TLE-Daten des Objektkatalogs enhält 
			und eine \textit{RefCatalog.cato} Datei, die die vom Benutzer eingegebene TLE-Daten der
			Referenzobjekte enthält, im gleichen Ordner abgelegt. Sie gibt nach Abschluss der Simulation
			entweder ein Ergebnis oder einen Fehlerbericht als Textdatei aus.
			
		\section{Diagramme}
		
		
			\begin{figure}[H]
				\centering	
					\includegraphics[scale=0.24]{images/class_diagram.png}
				\caption{Klassendiagramm}
			\label{class_diagram}	
			\end{figure}
			
			\begin{figure}[H]
				\centering	
					\includegraphics[scale=0.4]{images/component_diagram.png}
				\caption{Komponentendiagramm}
			\label{component_diagram}	
			\end{figure}
			
			\begin{figure}[H]
				\centering	
					\includegraphics[scale=0.4]{images/sequence_diagram.png}
				\caption{Sequenzdiagramm: Berechnung Starten}
			\label{seq_diagram}	
			\end{figure}
			
		\newpage
		\section{Versionshistorie}
			\textbf{Version 1.0 (12.12.2012):}
			\begin{itemize}
				\item  Erste Version des Entwurfs fertiggestellt
			\end{itemize}
					
\end{document}
